import java.awt.EventQueue;

import javax.swing.JFrame;
import java.awt.FlowLayout;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;


import java.awt.BorderLayout;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Vector;

import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.ListSelectionModel;


public class formulario {

	private JFrame frame;
	private static JTable table;
    private final String[] COLUMNAS;
    private DefaultTableModel modeloTabla;
    private JButton btnNewButton;
    private JTextField textField;
    private JComboBox comboBox;

    
    
    /**
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					formulario window = new formulario();
					window.frame.setVisible(true);
				} catch (Exception e) {
					System.out.print("Problema con el main");
				}
				
		             
	
			
				
						
							  
			}
		});
	}

	/**
	 * Create the application.
	 */
	public formulario() {
		
	
		COLUMNAS =  new String[] { "cantidad","Nombre", "Precio", "Tipo" };   // arreglo usado para asignar las columnas al defaultTableModel
	
		
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	
	 */
	private void initialize() {
		frame = new JFrame();
				
	 modeloTabla =  new DefaultTableModel (COLUMNAS,0)            // isCellEditable es para hacer que las celdas no puedan ser editadas
	 { public boolean isCellEditable (int row, int column) 
	 {     
		 
		
			 				
			 return false;
			
	 }
	 	 }; 
	 
	 
	     
	    
	
		
		frame.setBounds(100, 100, 567, 542);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(null);
		
		btnNewButton = new JButton("registrar");
		btnNewButton.addActionListener(new ActionListener() {  // listener del boton de registrar
			public void actionPerformed(ActionEvent arg0) {
				
				agregarFila();
				
				
				
			}
		});
		btnNewButton.setBounds(10, 438, 89, 23);
		frame.getContentPane().add(btnNewButton);
		
		
		
		table = new JTable(); 
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        
	   	
	 
		table.setModel(modeloTabla);
		
	
		
	
		table.getSelectionModel().addListSelectionListener(new ListSelectionListener () { //listener encargado de manegar cuando un registro en el jTable sea seleccionado
			
					
			  
			

			@Override
			public void valueChanged(ListSelectionEvent e) {
				
			    int cantidad;
				ResultSet resultados;
				String valor = new String();
				Object comboBoxValor;
				
				if(e.getValueIsAdjusting())  //evita que dicho evento se ejecute dos veces, a razon de que cuando el click es presionado y soltado
					try {
					
						valor = table.getValueAt(table.getSelectedRow(),1).toString(); // metodo usado para obtener el registro en el JTable
						
						resultados = sqlConection.Select("select Cantidad from productos_disponible where Nombre =  '" +  valor + "'" );
						resultados.next();
						cantidad = resultados.getInt("Cantidad");
						
						
						comboBoxValor = table.getValueAt(table.getSelectedRow(), 0);
						  comboBox.removeAllItems();   // pongo el removeAllItems aqui para limpiar el comboBox para que no se acumulen los valores que se le asigne
							 
						 
						  
							 for (int i = 1; i <= cantidad; i++)
							 								// ciclo para rellenar el comboBox
								 comboBox.addItem(i);               
										
							 comboBox.setSelectedItem(comboBoxValor);
							
							 
							 
					
					} catch (SQLException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				
				 
				
				
			
				
			}
			
			
	    		
		} );
		
		
		
		
		
		JScrollPane scrollPane = new JScrollPane (table);
		scrollPane.setBounds(0, 0, 551, 428);
		
		
	      frame.getContentPane().add(scrollPane);
	      
	      textField = new JTextField();
	      
	      textField.setBounds(109, 439, 86, 20);
	      frame.getContentPane().add(textField);
	      textField.setColumns(10);
	      
	
	      
	   
	      
	   

	      
	      
	      
	      
	      comboBox = new JComboBox();
	      comboBox.setBounds(348, 438, 46, 22);
	      frame.getContentPane().add(comboBox);
	      
	     
	      
	      
	      JLabel lblCantidad = new JLabel("Cantidad disponible");
	      lblCantidad.setBounds(225, 442, 113, 14);
	      frame.getContentPane().add(lblCantidad);
	      
	      JButton btnQuitar = new JButton("quitar");
	     
	      btnQuitar.setBounds(10, 472, 89, 23);
	      frame.getContentPane().add(btnQuitar);
 
	      
	      
	      
	      
	      
	      comboBox.addActionListener( new ActionListener () {

			@Override
			public void actionPerformed(ActionEvent evento) {
				
				
				try {
			
			modeloTabla.setValueAt(comboBox.getSelectedItem(), table.getSelectedRow(), 0);	 
				
				table.setModel(modeloTabla);
						
				}
				
				
				catch (ArrayIndexOutOfBoundsException e)
				{
					
					
				}
				
			}
	    	  
	      });
	      
	      btnQuitar.addActionListener(new ActionListener() {
		      	public void actionPerformed(ActionEvent arg0) {
		      		
		      	    modeloTabla.removeRow(table.getSelectedRow());
		      	    table.setModel(modeloTabla);
		      	    comboBox.removeAllItems(); 
		      		
		      		
		      	}
		      });
	     
	      
	      
	      
	      
		
	}
	
	

	//metodo que agrega fila  rellenando el DefaulTableModel con un vector indefinido  del tipo de datos
	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public void agregarFila ()
	{
		ResultSet resultados;
		Vector vectorTabla = new Vector ();
		
		     new sqlConection ("root", "1234","puntodeventa");
		
	        resultados =	sqlConection.Select( "select * from productos_disponible where Codigo =" + textField.getText() );
		 
	     
				
					
					
					try {
						
					
													
						resultados.next();
						
						 
						
						
						vectorTabla.add (1);
							
					    					    						
						vectorTabla.add (resultados.getString( COLUMNAS[1] ) );
					    
							
						vectorTabla.add (resultados.getDouble(COLUMNAS[2]) );
					     
							
						vectorTabla.add(resultados.getString(COLUMNAS[3]) ) ;
					    
						 
					
		
						 
					 
					 modeloTabla.addRow(vectorTabla);
					 
					} catch (SQLException e) {
						// TODO Auto-generated catch block
												
						JOptionPane.showMessageDialog(null, "el codigo introducido no es valido", "Mensaje de Error", JOptionPane.INFORMATION_MESSAGE);
						
					}
				
				
		
	               
	        
	}
}
